iT邦幫忙

2026 iThome 鐵人賽

DAY 8
0

大家好~~~ 今天要來介紹型別別名(Type Alias)和介面 (Interface)。當我們在撰寫複雜的資料結構時,不可能把那麼長串的型別重寫一遍又一遍吧?這時候就輪到型別別名和介面出場啦!


型別別名(Type Alias)

還記得在上一章介紹交叉型別使用的語法嗎?型別別名是TypeScript裡的一種語法,可以為既有的型別取一個新的名稱。直接拆解「型別別名」四個字的意思,直白點說,就是:「為型別訂一個別的名稱」,我知道解釋得有點爛,但大致意思大概就是這樣(抱歉)。在語法上,使用type替型別自訂一個新的名稱。常用在聯合型別、物件和基本型別上。

//使用範例:
type Example = string | number ;

//定義一個變數的狀態:
type StudentStatus = "wake up" | "sleep" | "learning" ;
//type也可以用來定義物件的狀態,限制status只能使用特定的值,,也增加了程式碼的可讀性

//定義一個物件:
type Student = { 
	name: string; 
	grade: number; 
	status: StudentStatus; 
};

//實際應用:
const s: Student = { 
	name: "Judy", 
	grade: 2, 
	status: "sleep" 
};

與此同時,我們也能夠用交叉型別為type擴充:

type User = { 
	name: string; 
};
type Admin = User & { role: string; };

介面(Interface)

基本上,介面時常和型別別名搞混,介面同樣是描述一個物件該有的屬性、方法型別等等。差別在於介面主要用來描述物件結構,而型別別名可以直接表示基本型別和聯合型別,當然兩者還有其他方面的差異,等等做個表格讓大家認識認識,先專注在Interface上吧。

  • 何時用得到Interface?
    • 當物件需要擴充(extends),或是宣告合併時,就能夠使用Interface
//使用範例:
interface Student{
	name: string;
	grade: number; 
}

//當需要擴充時,使用extends來表示:
interface CollegeStudent extends Student{
	department: string;
}

//實際應用:
const s: CollegeStudent = {
	name: "Judy",
	grade: 2,
	department: "西班牙語系",
};

介面的宣告合併,舉例如下:

//當兩個同名的介面存在時,雙方的屬性會被合併在一個介面中
interface Student{
	name: string;
}
interface Student{
	grade: number;
}

//上述的兩個介面,相當於下面這個:
interface Student{
	name: string;
	grade: number; 
}

//注意:合併介面的屬性型別,具有唯一性
interface Student{
	name: string;
}
interface Student{
	name: string; //重複寫上屬性是可以的,因為型別一致,TS不會報錯
	grade: number;
}

//錯誤示範:
interface Student{
	name: string;
}
interface Student{
	name: boolean; //在同名稱的介面更改屬性的型別,會讓TS報錯,這點須多加留意
	grade: number;
}

小結

今天的介紹就到這邊,相信很多人會搞混型別別名和介面的不同,因為乍看之下,兩者根本一模模一樣樣,但在使用上還是有不小的差距,這邊也整理了表格讓大家參考:

型別別名(Type Alias) 介面(Interface)
主要用途 用來定義基本型別、聯合型別、物件,常用來描述狀態(status) 用來描述物件的屬性和方法
擴充方式 以交叉型別來擴充 使用extends擴充(繼承)
聯合型別 能夠使用 無法使用
宣告合併 無法使用,宣告同名type會報錯 可以使用
應用 聯合型別、狀態定義、API回傳等 物件結構、需要extends或宣告合併時

老實說,其實這篇寫完,我也是有點霧煞煞,聽得懂歸聽得懂,但是我也是邊寫邊學,所以在這兩者的使用上,我也是拿著木棒打怪的新手,但至少能先有個概念,知道兩者能夠使用什麼、用在什麼地方,已經是踏出一小步了。明天要來介紹函式,今天就先到這邊啦~大家拜拜!


上一篇
[Day-7]聯合型別&交叉型別
下一篇
[Day-9] 函式(Function)-1
系列文
從零開始學習TypeScript:菜鳥的入門介紹與概覽22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言